<?php
require_once 'Connection.php';

/**
 * class NHANVIEN
 *
 * MaNV, HoTen, DiaChi, NgaySinh, Phai, Luong, Phong
 *
 * @author: hqlam
*/
class NHANVIEN {

	/**
	 * Create
	 *
	 * @return bool 
	 * Auto set inserted MaNV
	 */
	public static function Create(&$obj) {
		$con = Connection::GetConnection();
		$query = sprintf("INSERT INTO NHANVIEN(HoTen, Diachi, NgaySinh, Phai, Luong, Phong)
		 VALUES ('%s', '%s', STR_TO_DATE('%s', '%%d/%%m/%%Y'), %d, %f, %d)",
					mysql_real_escape_string($obj['HoTen']),
					mysql_real_escape_string($obj['DiaChi']),
					mysql_real_escape_string($obj['NgaySinh']),
					$obj['Phai'],
					$obj['Luong'],
					$obj['Phong']
					);
		$result = mysql_query($query, $con);
		$obj['MaNV'] = mysql_insert_id($con);
		return $result;
	}
	
	/**
	 * Update
	 *
	 * @return bool 
	 */
	public static function Update($obj) {
		$con = Connection::GetConnection();
		$query = sprintf("UPDATE NHANVIEN SET 
			HoTen = '%s', 
			DiaChi = '%s',
			NgaySinh = STR_TO_DATE('%s', '%%d/%%m/%%Y'), 
			Phai = %d, 
			Luong = %f, 
			Phong = %d 
			WHERE MaNV = %d",
					mysql_real_escape_string($obj['HoTen']),
					mysql_real_escape_string($obj['DiaChi']),
					mysql_real_escape_string($obj['NgaySinh']),
					$obj['Phai'],
					$obj['Luong'],
					$obj['Phong'],
					$obj['MaNV']
				);
		$result = mysql_query($query, $con);
		return $result;
	}
	
	/**
	 * Read
	 *
	 * @return PHONGBAN 
	 */
	public static function Read($maNV) {
		$con = Connection::GetConnection();
		$query = "SELECT MaNV, HoTen, DATE_FORMAT(NgaySinh, '%d/%m/%Y') AS NgaySinh, DiaChi, Phai, Luong, Phong 
			FROM NHANVIEN WHERE MaNV=$maNV";
		$lst = mysql_query($query, $con);
		if (mysql_num_rows($lst) != 1) return null;
		$item = mysql_fetch_assoc($lst);
		return $item;
	}
	
	/**
	 * Delete
	 *
	 * @return bool
	 */
	public static function Delete($obj) {
		$con = Connection::GetConnection();
		$query = sprintf("DELETE FROM NHANVIEN WHERE MaNV = %d", $obj['MaNV']);
		$result = mysql_query($query, $con);
		return $result;
	}
	
	/**
	 * Select NHANVIEN by Phong
	 *
	 * @return array of NHANVIEN
	 */
	public static function Select($phong = -1) {
		$con = Connection::GetConnection();

		$query = "SELECT MaNV, HoTen, DATE_FORMAT(NgaySinh, '%d/%m/%Y') AS NgaySinh, DiaChi, Phai, Luong, Phong FROM NHANVIEN";
		if ($phong != -1) $query .= " WHERE Phong = $phong";
		$query .= " ORDER BY MaNV DESC";
		
		$lst = mysql_query($query, $con);
		$result = array();
		while ($item = mysql_fetch_assoc($lst))
			array_push($result, $item);
		return $result;
	}

	/**
	 * Get employee view
	 *
	 * @return array 
	 */
	public static function GetView($obj) {
		$result = $obj;
		$result['Phai'] = ($result['Phai'] == 0)? 'Nam': 'Nữ';
		$phong = PHONGBAN::Read($result['Phong']);
		$result['Phong'] = $phong['TenPhong'];
		return $result;
	}

	/**
	 * Validate input
	 *
	 * @return array of error
	 */
	public static function Validate($input) {
		$errors = array();
		NHANVIEN::CheckHoTen($input, $errors);
		NHANVIEN::CheckDiaChi($input, $errors);
		NHANVIEN::CheckNgaySinh($input, $errors);
		NHANVIEN::CheckPhai($input, $errors);
		NHANVIEN::CheckLuong($input, $errors);
		NHANVIEN::CheckPhong($input, $errors);
		return $errors;
	}
	
	// HoTen: required, maxlen(20)
	private static function CheckHoTen($input, &$errors) {
		try {
			// not empty
			if ($input['HoTen'] == '') throw new Exception('Chưa nhập họ tên');
			// maxlen(20)		
			if (mb_strlen($input['HoTen'], 'UTF-8') > 20) throw new Exception('Họ tên phải ngắn hơn 20 ký tự');
		} catch (Exception $e) {
			$errors['HoTen'] = $e->getMessage();		
		}
	}
	
	// DiaChi: maxlen(100)
	private static function CheckDiaChi($input, &$errors) {
		try {
			// maxlen(100)		
			if (mb_strlen($input['DiaChi'], 'UTF-8') > 100) throw new Exception('Địa chỉ phải ngắn hơn 100 ký tự');
		} catch (Exception $e) {
			$errors['DiaChi'] = $e->getMessage();		
		}
	}
	
	// NgaySinh: required, format(dd/MM/yyyy)
	private static function CheckNgaySinh($input, &$errors) {
		try {
			// required
			if ($input['NgaySinh'] == '') throw new Exception('Chưa nhập ngày sinh');
			// format(dd/MM/yyyy)
			if (sscanf($input['NgaySinh'], "%d/%d/%d", $d, $m, $y) != 3)
				throw new Exception('Ngày sinh không đúng định dạng');
			// valid date
			if (!checkdate($m, $d, $y)) throw new Exception('Ngày sinh không hợp lệ');
		} catch (Exception $e) {
			$errors['NgaySinh'] = $e->getMessage();		
		}
	}
	
	// Phai: required
	private static function CheckPhai($input, &$errors) {
		try {
			// required
			if (!array_key_exists('Phai', $input)) throw new Exception('Chưa chọn phái');
		} catch (Exception $e) {
			$errors['Phai'] = $e->getMessage();		
		}
	}
	
	// Luong: float
	private static function CheckLuong($input, &$errors) {
		try {
			// required
			if ($input['Luong'] != '' && !is_numeric($input['Luong'])) throw new Exception('Lương không hợp lệ');
		} catch (Exception $e) {
			$errors['Luong'] = $e->getMessage();		
		}
	}

	// Phong: required
	private static function CheckPhong($input, &$errors) {
		try {
			// required
			if (!array_key_exists('Phong', $input)) throw new Exception('Chưa chọn phòng');
		} catch (Exception $e) {
			$errors['Phong'] = $e->getMessage();		
		}
	}
}

?>